Advertisement
Guest User

Untitled

a guest
Sep 15th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.04 KB | None | 0 0
  1. /* Program udarbejdet Af Andreas Christoffersen
  2. * v/AC Maskin Service ApS for Topsil 24-03-2018
  3. * REV. 3.09
  4. */
  5.  
  6. #include <AccelStepper.h>
  7.  
  8. //Definer I/O adresser
  9. #define pin_Step1 8 //FREM
  10. #define pin_Step2 9 //TILBAGE
  11. #define pin_Stop 2 //STOP
  12. #define pin_Kal 3 //START KALIBRERING
  13. #define pin_UdgPos 4 //UDGANGS POSITION
  14. #define pin_DIR 5 //RETNING
  15. #define pin_STEP 6 //STEP PULS
  16. #define pin_EN 7 //ENABLE
  17. #define pin_Kvit 10 //KVITTERING TIL PLC
  18.  
  19. //Definer konstanter
  20. #define ACCELERATE_Q_RUN 200 //acceleration kvotient udner drift
  21. #define ACCELERATE_Q_KAL 200 //acceleration kvotient under kalibrering
  22. #define MAX_SPEED 300 //Højeste hastighed for stepper
  23. #define MAX_SPEED_KAL 300 //Højeste hastighed for kalibrering
  24. #define Afstand 1600 //Afstand der skal køres
  25. #define kalAfstand 200 //Afstand kalibreringen kører
  26. #define debounceCount 5 //debounce tid
  27.  
  28. //Definer variabler
  29. bool nyStart = 1; //Første opstart
  30. int tilstand = 0; //Maskine tilstand 0 = inde, 1 = ude, 2 = kører frem, 3 = kører tilbage, 10 = kalibrer1, 11 = kalibrer2, 12 = kalibrer3
  31. int pos = 0; //afstand der skal rejses
  32. bool pin_Step1_state = 0; //debounce navn
  33. bool pin_Step2_state = 0; //debounce navn
  34. bool pin_Stop_state = 0; //debounce navn
  35. bool pin_Kal_state = 0; //debounce navn
  36. bool pin_UdgPos_state = 0; //debounce navn
  37. int pin_Step1_count = 0; //debounce tæller
  38. int pin_Step2_count = 0; //debounce tæller
  39. int pin_Stop_count = 0; //debounce tæller
  40. int pin_Kal_count = 0; //debounce tæller
  41. int pin_UdgPos_count = 0; //debounce tæller
  42. bool kviter = 0; //der skal kviteres
  43. int currentCount = 0; //Tælleværk for kvittering
  44. AccelStepper stepper(AccelStepper::DRIVER, pin_STEP, pin_DIR); //Definer step motor
  45.  
  46. //Opsætning
  47. void setup() {
  48. //Definerer INPUT/OUTPUT anvendelse
  49. pinMode(pin_Kvit, OUTPUT);
  50. pinMode(pin_Step1, INPUT);
  51. pinMode(pin_Step2, INPUT);
  52. pinMode(pin_Stop, INPUT);
  53. pinMode(pin_Kal, INPUT);
  54. pinMode(pin_UdgPos, INPUT);
  55. digitalWrite(pin_EN, LOW); //Sætter ENABLE aktiv
  56. stepper.setMaxSpeed(350); //Teoretisk max hastighed for stepper
  57. digitalWrite(pin_Kvit, HIGH); //sætter Kviterings udgang lav
  58. stepper.setAcceleration(ACCELERATE_Q_KAL);
  59. }
  60.  
  61. void loop()
  62. {
  63. if(digitalRead(pin_Stop) == HIGH) {pin_Stop_count++; if(pin_Stop_count >= debounceCount) {pin_Stop_state = 1;} } else {pin_Stop_state = 0; pin_Stop_count = 0;} //debounce pin_Stop
  64. if(digitalRead(pin_Kal) == HIGH) {pin_Kal_count++; if(pin_Kal_count >= debounceCount) {pin_Kal_state = 1;} } else {pin_Kal_state = 0; pin_Kal_count = 0;} //debounce pin_Kal
  65. if(digitalRead(pin_UdgPos) == HIGH) {pin_UdgPos_count++; if(pin_UdgPos_count >= debounceCount) {pin_UdgPos_state = 1;} } else {pin_UdgPos_state = 0; pin_UdgPos_count = 0;} //debounce pin_UgdPos
  66. if(pin_Stop_state == 1) //Hvis der bliver kaldt på stop
  67. {
  68. nyStart = 1; //Maskinen resettes
  69. tilstand = 0; //sætter tilstand til 0
  70. }else
  71. {
  72. if((nyStart == 1) && (tilstand == 0)) //Hvis tilstand er 0 or nyStart = 1
  73. {
  74. if(pin_Kal_state == 1) //Afventer kalibrerings input fra PLC
  75. {
  76. nyStart = 0; //sætter ny start sekvens til 0
  77. if(pin_UdgPos_state == 1) //kontrolerer slæde position
  78. {
  79. pos = kalAfstand; //sætter pos til kalibrerings afstand
  80. //stepper.setAcceleration(ACCELERATE_Q_KAL); //sætter høj hastighed under 'dum' bevægelse
  81. //stepper.setSpeed(MAX_SPEED_KAL); //sætter hastighed for hurtig
  82. stepper.moveTo(pos); //kører step motor pos steps
  83. tilstand = 10; //sætter maskin tilstand til 10(kalibrering1)
  84. } else
  85. {
  86. pos = -10000; //sætter destination til et meget stort negativt tal
  87. //stepper.setAcceleration(ACCELERATE_Q_KAL); //sætter kalibrerings hastighed
  88. //stepper.setSpeed(MAX_SPEED_KAL); //Sætter hastighed for kalibrering
  89. stepper.moveTo(pos); //kører step motor pos steps
  90. tilstand = 11; //sætter maskin tilstand til 11(kalibrering2)
  91. }
  92. }
  93. }
  94. if((tilstand == 10) && (stepper.distanceToGo() == 0)) //Hvis tilstand 10 er aktiv & step motoren er færdig
  95. {
  96. tilstand = 11; //sætter maskin tilstand til 11(kalibrering2)
  97. pos = -10000; //sætter destination til højt negativt tal
  98. stepper.moveTo(pos); //definerer destination for step motor
  99. //stepper.setAcceleration(ACCELERATE_Q_KAL); //sætter motor accelerationen til kalibrerings hastighed
  100. //stepper.setSpeed(MAX_SPEED_KAL); //sætter motor max hastighed til kalibrerings hastighed
  101. }
  102. if((tilstand == 11) && (pin_UdgPos_state == 1)) //Hvis tilstand er 11 or udgangsposition er nået
  103. {
  104. stepper.stop(); //stopper motor
  105. stepper.setCurrentPosition(0); //sætter home position
  106. tilstand = 0; //sætter maskin tilstand til 0
  107. kviter = 1; //Anmoder om kvittering
  108. }
  109. if(nyStart != 1)
  110. {
  111. if(digitalRead(pin_Step1) == HIGH) {pin_Step1_count++; if(pin_Step1_count >= debounceCount) {pin_Step1_state = 1;} } else {pin_Step1_state = 0; pin_Step1_count = 0;} //debounce pin_Step1
  112. if(digitalRead(pin_Step2) == HIGH) {pin_Step2_count++; if(pin_Step2_count >= debounceCount) {pin_Step2_state = 1;} } else {pin_Step2_state = 0; pin_Step2_count = 0;} //debounce pin_Step2
  113. if((pin_Step1_state == HIGH) && (pin_UdgPos_state == HIGH) && (nyStart == 0) && (tilstand == 0)) //Kør frem & afvent
  114. {
  115. stepper.moveTo(Afstand); //Sætter stepper destination
  116. tilstand = 2; //sætter maskin tilstand til 2
  117. }
  118. if((pin_Step2_state == HIGH) && (pin_UdgPos_state == LOW) && (nyStart == 0) && (tilstand == 1)) //kør tilbage og afvent
  119. {
  120. stepper.moveTo(0); //Sætter stepper destination
  121. tilstand = 3; //sætter maskin tilstand til 3
  122. }
  123. }
  124. if((tilstand == 2) && (stepper.distanceToGo() == 0)) //Hvis tilstand = 2 og step motoren er færdig med at køre
  125. {
  126. tilstand = 1; //Sætter tilstand til 1
  127. kviter = 1; //Admoder om kvittering
  128. }
  129. if((tilstand == 3) && (stepper.distanceToGo() == 0)) //Hvis tilstand = 3 og step motoren er færdig med at køre
  130. {
  131. tilstand = 0; //Sætter tilstand til 0
  132. kviter = 1; //Anmoder om kvittering
  133. }
  134. if(kviter == 1) //Hvis der er anmodet om kvittering og den ikke allerede er sendt for længe
  135. {
  136. digitalWrite(pin_Kvit, LOW); //Aktiverer pin_Kvit relæ
  137. delay(200); //0.2 sek forsinkelse
  138. digitalWrite(pin_Kvit, HIGH); //Deaktiverer pin_Kvit relæ
  139. kviter = 0; //afstiller kvitering
  140. }
  141. stepper.run(); //Kør stepper hvis der er behov
  142. }
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement